UEFI——统一可扩展固件接口(Unified Extensible Firmware Interface)引导程序
UEFI ,统一可扩展固件接口为操作系统提供引导时和运行时(boot- and run-time)服务。UEFI是i386和amd64 CPU架构上传统BIOS的替代品,也用于arm、arm64和riscv架构。
UEFI规范是可扩展固件接口(Extensible Firmware Interface,EFI)规范的继承者。UEFI和EFI这两个术语经常可以互换使用。
UEFI引导过程加载位于EFI系统分区(EFI System Partition,ESP)中的系统引导代码。ESP是具有特定标识符的GPT或MBR分区,其中包含具有指定文件层次结构的 msdosfs(4) FAT文件系统。
xxxxxxxxxxPartition Scheme ESP IdentifierGPT C12A7328-F81F-11D2-BA4B-00A0C93EC93BMBR 0xEF
UEFI 引导过程如下:
UEFI 固件在通电时运行,并在EFI系统分区中搜索OS加载程序。加载程序的路径可以由 efibootmgr(8) 管理的EFI环境变量设置。如果未设置,则使用特定于体系结构的默认值。
x Architecture Default Path amd64 /EFI/BOOT/BOOTX64.EFI arm /EFI/BOOT/BOOTARM.EFI arm64 /EFI/BOOT/BOOTAA64.EFI i386 /EFI/BOOT/BOOTIA32.EFI riscv /EFI/BOOT/BOOTRISCV64.EFIFreeBSD的默认 UEFI 引导配置在默认路径中安装 loader.efi 。
loader.efi 从 /boot.config 或 /boot/config 读取启动配置。
loader.efi 加载并引导内核,如 loader.efi(8) 中所述。
通过 UEFI 引导时, vt(4) 系统控制台会自动选择。
xxxxxxxxxxUEFI bootstrap/boot/loader.efiFinal stage bootstrap/boot/kernel/kernelDefault kernel/boot/kernel.old/kernelTypical non-default kernel (optional)
xmsdosfs(4), vt(4), boot.config(5), boot(8), efibootmgr(8), efidp(8),efivar(8), gpart(8), loader.efi(8), uefisign(8)
对ia64架构的EFI引导支持最早出现在FreeBSD 5.0中。对amd64的 UEFI 引导支持首次出现在FreeBSD 10.1中;适用于FreeBSD 11.0中的arm64;适用于FreeBSD 12.0中的armv7;以及FreeBSD 13.0中的riscv。